package com.fenghuajueli.module_user.utils;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;

import java.net.URLEncoder;
import java.util.Set;

/**
 * 支付宝周期扣款商品scheme回调参数检测工具
 */
public class ZfbSubscribeCheckUtil {

    /**
     * 支付宝签约成功后回调到我们自己app的协议，每个app都需要自己定义一个协议，
     * 不能相同 不然会造成有相同scheme的app在同一手机上时，导致回调不正确
     */
    public static final String PAY_SCHEME = "xxxxxxxpay";

    //主机名 相当于域名 与app唯一对应
    public static final String PAY_SCHEME_HOST = "www.xxxxxxxpay.com";

    //scheme唤醒支付宝所用
    public static final String PAY_SCHEME_URL = "alipays://platformapi/startapp?appId=60000157&appClearTop=false&startMultApp=YES&sign_params=";

    public static final String PAY_SUCCESS_CODE = "10000";

    /**
     * 支付宝回调关键参数相关名称,根据app需要获取对应参数
     */
    public enum ParamName {
        msg,  //支付成功或失败的提示消息
        code,  //成功或者失败的码  10000表示成功  10003表示等待中
        sign,
        external_agreement_no,
        version,
        sign_time,
        agreement_no,
        invalid_time,
        auth_app_id,
        personal_product_code,
        valid_time,
        app_id,
        sign_type,
        sign_scene,
        status,
        alipay_logon_id,
        timestamp
    }


    /**
     * 根据获取到的intent来判断是否签约成功
     *
     * @param intent
     * @return true表示签约并付款成功
     */
    public static boolean isPaySuccess(Intent intent) {
        if (intent == null) {
            return false;
        }
        Uri uri = intent.getData();
        if (uri != null) {
            String scheme = uri.getScheme();
            if (PAY_SCHEME.equals(scheme) && PAY_SCHEME_HOST.equals(uri.getHost())) {
                Set<String> params = uri.getQueryParameterNames();
                if (params.contains(ParamName.code.name())) {
                    String code = uri.getQueryParameter(ParamName.code.name());
                    if (PAY_SUCCESS_CODE.equals(code)) {
                        return true;
                    } else {
                        return false;
                    }
                } else {
                    return false;
                }
            } else {
                return false;
            }
        } else {
            return false;
        }
    }


    /**
     * 判断是否是支付宝周期扣款回调协议，是的话才调用判断是否支付成功，
     *
     * @param intent
     * @return
     */
    public static boolean isPayScheme(Intent intent) {
        if (intent == null) {
            return false;
        }
        Uri uri = intent.getData();
        if (uri != null) {
            String scheme = uri.getScheme();
            if (PAY_SCHEME.equals(scheme) && PAY_SCHEME_HOST.equals(uri.getHost())) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }


    /**
     * 通过scheme唤起支付宝进行订阅
     *
     * @param context
     * @param pageUrl 后台返回的链接参数
     */
    public static boolean goSubscribeVip(Context context, String pageUrl) {
        try {
            Intent action = new Intent(Intent.ACTION_VIEW);
            action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            String params = pageUrl.substring(pageUrl.indexOf("?") + 1);
            String encodeUrl = URLEncoder.encode(params, "utf-8");
            StringBuilder builder = new StringBuilder();
            builder.append(PAY_SCHEME_URL);
            builder.append(encodeUrl);
            action.setData(Uri.parse(builder.toString()));
            context.startActivity(action);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

}
